package com.yusvn.scm.quartz.service;

import java.sql.Timestamp;

import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db;
import com.yusvn.scm.common.constant.Const;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;

/**
 * 程序系统定时任务
 * @author liugz
 *
 */
public class SysCronService {
	
	/**
	 * 清除过期session<br>
	 * session过期日期小于3天前的日期则删除
	 */
	public void deleteSession() {
//		System.out.println("3天后的日期:"+DateUtil.formatDateTime( DateUtil.offsetDay(DateUtil.endOfDay(DateUtil.date() ), 3) ));
//		System.out.println("3天后的日期long:"+DateUtil.offsetDay(DateUtil.endOfDay(DateUtil.date() ), 3).getTime() );
		
		long currentTime = System.currentTimeMillis() - 3*24*60*60*1000;
		
		Db.delete("delete from sys_session where expireat<? ", currentTime);
	}
	
	/**
	 * 清除登录日志<br>
	 * 删除一年前的登录日志
	 */
	public void deleteLoginRecord() {
		DateTime date = DateUtil.offsetMonth(DateUtil.date(), -12); //当前日期往前推12个月
		//System.out.println(" 日期："+DateUtil.formatDateTime(date));
		Timestamp ts = new Timestamp(date.getTime());
		//System.out.println(ts);
		
		Db.delete("delete from sys_login_record where create_time<? ", ts);
	}
	
	/**
	 * 通用执行存储过程方法
	 */
	public void execProc(Kv kv) {
		String jsonStr = kv.getStr("jobparm");
		
		JSONObject obj = JSONObject.parseObject(jsonStr);
		String proc = obj.getString("exec"); //调用存储过程语句
		
		int cnt = Db.use(Const.SCMDB).update(proc);
		
		//调用存储过程 方式1
//		int cnt = Db.use(Const.SCMDB).update("CALL rfob_doc_update(?,?,?) ", 2, 20221215, 7);
//		int cnt = Db.use(Const.SCMDB).update("CALL rfob_doc_update(2, 20221215, 7) ");
//		System.out.println(cnt);
	}
	
	/**
	    //调用存储过程 方式1
		int cnt = Db.use(Const.SCMDB).update("CALL proc_lgz_test1(?) ", "衬衫10");
		System.out.println(cnt);
		
		//调用存储过程 方式2
		Db.use(Const.SCMDB).execute(new ICallback() {
			@Override
			public Object call(Connection conn) throws SQLException {
				CallableStatement cs = (CallableStatement) conn.prepareCall("call proc_lgz_test1(?)");
			    cs.setString(1, "衬衫13");
			    //cs.registerOutParameter(2, java.sql.Types.REF_CURSOR);  //存储过程输出参数
			    cs.execute();
			    cs.close();
			    //return cs.getObject(1);
			    return null;
			}
		});
	 */
	
}
